% Autore: Bardelle Renzo
% Argomenti: divisione applicazione web in lato utente, lato amministrativo, lato casse

%%%%%%% COMANDI DI COMODO E FORMATTAZIONE DELLA PAGINA

%\newcommand{\fitem}{\item[$\diamond$]}
%\newcommand{\item}{\item[$\rightarrow$]}
\newcommand{\rel}[1]{\texttt{#1}}
%\setlength{\parindent}{0pt}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\chapter{Organizzazione pagine web}
\label{chbOPW}

%\section{Sezione Utente - Sezione Amministrativa}
\label{parUA}

	Il sito web si divide in due sezioni:
	\begin{itemize}
		\item Sezione Utente;
		\item Sezione Amministrativa.
	\end{itemize}
	La consultazione del sito internet lato utente è consentita a qualsiasi visitatore, mentre la prenotazione e l'acquisto di biglietti vengono consentiti soltanto ad utenti registrati.
	L'accesso all'area amministrativa è permesso soltanto ad utenti abilitati, in possesso dei privilegi di amministrazione; la distinzione tra utente comune ed utente con privilegi di amministrazione è 
	effettuata tramite l'attributo ``amministrativo'' della relazione \texttt{Utente}.
	
	Nel seguito vengono presentate le principali scelte progettuali intraprese per la 
	realizzazione di queste due sezioni.
	
%\subsection{Sezione Utente}
\section{Sezione Utente}
\label{subparSU}

	\begin{figure}[htbp]
	\begin{center}
	\includegraphics[width=\textwidth]{img/chSWA/latoUtente.eps}
	  \caption{\emph{Albero delle pagine .jsp e .html Lato Utente}}
	  \label{figchSWASLU}
	\end{center}
	\end{figure}
	
	Un overview delle pagine web consultabili lato utente è fornita in Figura \ref{figchSWASLU},
	la funzione di ciascuna pagina è facilmente identificabile dal nome della pagina stessa.
	Sul lato sinistro dell'immagine è messa in evidenza la struttura comune a tutte le pagine di questa sezione.
	Ogni pagina dell'area utente include tramite una chiamata JSP, tre menu dedicati alla navigazione ed alla 
	gestione dei dati personali degli utenti:
	\begin{itemize}
		\item menu di login-logout (url: login\_menu.jsp);
		\item menu per la navigazione (url: nav\_menu.jsp);
		\item footer (url: footer.html).
	\end{itemize}
	L'inclusione dei menu tramite chiamata JSP facilita la manutenibilità dei menu stessi perchè risparmia di riportare
	manualmente eventuali modifiche applicate ai menu in ognu delle pagine, delegando il compito di assemblare le pagine al server.
	Le Figure \ref{figchSWAU}, \ref{figchSWAL}, \ref{figchSWALA} mostrano la struttura generale delle pagine e lo stato dei menu
	rispettivamente in assenza di login, a seguito del login di un utente semplice o con privilegi di amministrazione.
	
	\begin{figure}[htbp]
	\begin{center}
	\includegraphics[width=\textwidth]{img/chSWA/unlogged.eps}
	  \caption{\emph{Struttura menu prima del login.}}
	  \label{figchSWAU}
	\end{center}
	\end{figure}
	
	\begin{figure}[htbp]
	\begin{center}
	\includegraphics[width=\textwidth]{img/chSWA/logged.eps}
	  \caption{\emph{Struttura menu al login di un utente.}}
	  \label{figchSWAL}
	\end{center}
	\end{figure}
	
	\begin{figure}[htbp]
	\begin{center}
	\includegraphics[width=\textwidth]{img/chSWA/loggedadm.eps}
	  \caption{\emph{Struttura menu al login di un amministratore.}}
	  \label{figchSWALA}
	\end{center}
	\end{figure}

%- presentazione dei menu per la navigazione (login menu, navigation menu, footer)
	\subsection{Menu di login-logout}
	\label{subsubparLILO}	
	
		Il menu di login/logout fornisce all'utente il controllo su tutti i dati inerenti
		la sua vita all'interno della base di dati del cinema:
		\begin{itemize}
			\item registrazione;
			\item login/logout;
			\item modifica dei dati utente;
			\item verifica e stampa delle prenotazioni effettuate.
		\end{itemize}
		
		Le Figure \ref{figchSWAU} e \ref{figchSWAL} mostrano lo stato dei menu prima e dopo il
		login di un utente.
		
		Il Menu di Login/Logout rappresenta anche il \emph{trait d'union} tra l'area utente e l'area amministrativa.
		Infatti soltanto al login di un utente con privilegi di amministrazione è accessibile la voce 
		``Area amministrativa'' (Figura \ref{figchSWALA}) che rimanda alla home page della sezione amministrativa;
		viene inoltre presentata un'eventuale finestra pop-up
		riportante elementi del database che richiedono particolare attenzione, come ad esempio lo stato dei proiettori.
		Questa sovrapposizione a livello applicazione tra area utente ed amministrativa non è casuale ma è il riflesso della
		sovrapposizione a livello logico tra utente ed amministratore; infatti un amministratore è anche utente del cinema
		e può effettuare prenotazioni e pagamenti per gli spettacoli attraverso l'area utente.
		
\pagebreak		
		
		\subsection{Menu di Navigazione}
		\label{subsubparNavMenu}
				
		Il Menu di Navigazione consente a qualsiasi visitatore di:
		\begin{itemize}
			\item accedere alla homepage;
			\item consultare la programmazione di Film ed Eventi;
			\item acquistare biglietti o prenotare poltrone nelle varie sale.
		\end{itemize}
		Prenotazione ed acquisto di bliglietti sono consentite previo login ed avvengono tramite un'interfaccia grafica
		interattiva realizzata in JavaScript.
		Come da specifiche è imposto un limite massimo di 5 posti prenotabili.
		
		\subsection{Footer}
		\label{subsubparF}		
				
		Il Menu Footer mette a disposizione:
		\begin{itemize}
			\item un link ai dati di riferimento per ciascuna sede (indirizzo, telefono, ecc...);
			\item un link ad un disclaimer sulle privacy policy.	
		\end{itemize}
		
\section{Sezione Amministrativa}
\label{subparSA}

	\begin{figure}[htbp]
	\begin{center}
	\includegraphics[width=\textwidth]{img/chSWA/admmenu.eps}
	  \caption{\emph{Struttura menu area amministrativa.}}
	  \label{figchSWAAMM}
	\end{center}
	\end{figure}
	
	Come indicato nel paragrafo \ref{subsubparLILO} l'accesso all'area di amministrazione
	è consentito agli utenti con privilegi di aministrazione tramite il menu di login.
	Le pagine dell'area amministrativa utilizzano anch'esse l'import, tramite JSP, di un menu comune (amm\_menu.jsp).

	
	\subsection{Menu di Amministrazione}
	\label{subsubparAmmMenu}		
	
	La struttura del menu è più articolata rispetto a quelli dell'area utente. Il menu è di tipo
	drop-down e raggruppa le sue voci per aree tematiche, allo scopo di facilitare l'accesso ai vari strumenti di
	amministrazione (Figura \ref{figchSWAAMM}).
	Le voci di menu previste, con relative funzionalità, sono:
	\begin{itemize}
		\item SEDI E SALE:
			\begin{itemize}
				\item creazione di nuove sale tramite interfaccia grafica dinamica realizzata in Javascript;
				\item modifica ed eliminazione di sale già esistenti. La possibilità di creare od eliminare
						sale o poltrone è limitata a sale e poltrone non vincolate ad altri elementi del database.
						Questa limitazione è stata introdotta per evitare cancellazioni involontarie di dati
						utili dal database;
			\end{itemize}
		\item TARIFFE:
			\begin{itemize}
				\item creazione di nuove tipologie di biglietti od abbonamenti;
				\item modifica di biglietti o abbonamenti già esistenti, da notare che questa operazione
					non altera il prezzo dei biglietti già emessi perchè
					al momento dell'emissione il prezzo del biglietto è riportato in un campo apposito;
				\item eliminazione di biglietti o abbonamenti già esistenti, purchè non associati ad alcun biglietto;
			\end{itemize}
		\item PROIETTORI:
			\begin{itemize}
				\item inserimento di nuovi proiettori;
				\item spostamento di un proiettore da una sala ad un'altra;
				\item inserimento e modifica dei dati per il personale addetto alla manutenzione;
				\item gestione degli interventi di manutenzione;
			\end{itemize}
		\item SPETTACOLI:
			\begin{itemize}
				\item creazione di nuovi eventi, film e spettacoli con inserimento nel palinsesto;
				\item noleggio di film in 2D e 3D.
			\end{itemize}
	\end{itemize}

\section{Applicazione Sezione Casse}
\label{subparLatoCasse}

	L'attività di un cinema multisala richiede anche un'applicazione
	a servizio delle casse, che consenta l'emissione dei biglietti,
	la conferma e la riscossione degli importi derivanti dalle prenotazioni
	non evase online.
	Anche l'applicazione lato casse necessiterà di interfacciarsi con
	il database e dovrà assolvere ai seguenti compiti:
	\begin{itemize}
		\item verifica dei dati anagrafici dei nuovi iscritti;
		\item emissione e validazione dei biglietti;
		\item riscossione dei pagamenti per le prenotazioni effettuate online ed alle casse;
		\item emissione e gestione del consumo degli abbonamenti.
	\end{itemize}

\section{Completo utilizzo del database}
\label{subparUtilizzoDB}

	A conclusione della descirzione delle funzionalità offerte dalle varie sezioni
	dell'applicazione (sezione utente, sezione amministrativa, sezione casse) nella gestione dei cinema, 
	si ritiene utile riportare uno schema che indichi quali relazioni del database rientrano nelle \emph{competenze}
	di quale sezione dell'applicazione.
	Per relazione di \emph{competenza} di una sezione qui si itende una relazione
	che viene \emph{compilata} da quella specifica sezione. È chiaro che ciascuna
	sezione dell'applicazione ha forti interazioni con le altre, ma la Tabella \ref{tabSezioni}
	può dare una migliore comprensione del contesto nel quale ciascuna sezione
	opera:
	
	\begin{table}[H]
		\begin{tabular}{ |l|l|l|l| }

		\hline

		\textbf{DB ADMIN.}	& \textbf{Sz. UTENTE} 	& \textbf{Sz. AMMINISTRATIVA} 	& \textbf{Sz. CASSE} \\

		\hline \hline

		\rel{città}			& \rel{utente} 			& \rel{sala} 					& \rel{biglietto} 		\\
		\rel{sede}			& \rel{messaggio} 		& \rel{poltrona} 				& \rel{abbonamento} 		\\ \cline{3-3}
							& \rel{biglietto} 		& \rel{tariffa}	 				& \rel{r\_consuma} 		\\ 		
							&						& \rel{listino}	 				&						\\ \cline{3-3}
							&						& \rel{proiettore}	 			&						\\
							&						& \rel{tecnico}	 				&						\\
							&						& \rel{interventomanutenzione}	&						\\ \cline{3-3}
							&						& \rel{fornitore}	 			&						\\
							&						& \rel{evento}	 				&						\\
							&						& \rel{film}	 					&						\\
							&						& \rel{noleggio}	 				&						\\
							&						& \rel{palinsesto}	 			&						\\
							&						& \rel{spettacolo}	 			&						\\
							&						& \rel{r\_proiettato}	 		&						\\
		\hline \hline
		\end{tabular}
		\caption{Sezioni e relazioni di competenza.}
  		\label{tabSezioni}
	\end{table}
	
	Nella prima colonna di Tabella \ref{tabSezioni} è evidenziato come la gestione di sedi e città non sia prevista
	a livello applicazione ma sia affidata all'amministratore del database.
	Per la sezione amministrativa è stata effettuata un'ulteriore suddivisione che permette di individuare i gruppi di relazioni
	rispettivamente di competenza della prima, seconda, terza e quarta voce del menu dell'area amministrativa.
	Pur non essendo una dimostrazione formale della completezza dell'applicazione, la Tabella \ref{tabSezioni} rappresenta 
	comunque una garanzia che tutte le 21 relazioni del database siano state prese in considerazione nella creazione dell'applicativo.